package com.fesine.learn.design.principle.dependenceinversion;

/**
 * @description: 应用实现类
 * @author: fesine
 * @createTime:2019/2/16
 * @update:修改内容
 * @author: fesine
 * @updateTime:2019/2/16
 */
public class Test {

    /**
     * v1
     * 如果user需要学习新课程，则需要修改User类
     * @param args
     */
    //public static void main(String[] args) {
    //    User user = new User();
    //    user.studyJava();
    //    user.studyFE();
    //}

    /**
     * v2
     * 通过方法传入课程对象，缺点是无法通过注入课程实现
     * @param args
     */
    //public static void main(String[] args) {
    //    User user = new User();
    //    user.studyMyCourse(new JavaCourse());
    //    user.studyMyCourse(new FECourse());
    //}

    /**
     * v3通过构造器传入学习的课程对象，缺点是学习多门课程时需要每次都是new用户
     * @param args
     */
    //public static void main(String[] args) {
    //    User user = new User(new JavaCourse());
    //    user.studyMyCourse();
    //    user = new User(new FECourse());
    //    user.studyMyCourse();
    //}

    /**
     * v4 通过setter方法实现
     * @param args
     */
    public static void main(String[] args) {
        User user = new User();
        user.setiCourse(new JavaCourse());
        user.studyMyCourse();
        user.setiCourse(new FECourse());
        user.studyMyCourse();
    }
}
